package com.library.dao.impl;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.library.bean.Book;
import com.library.bean.User;
import com.library.dao.BaseDao;
import com.library.dao.BookDao;

public class BookDaoImpl implements BookDao {

	@Override
	public List<Book> selectAllBook(int pageNum,int pageSize) {
		// 数据库连接 操作对象 结果集
				Connection con = null;//数据库连接对象  代表一次数据库连接
				PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
				ResultSet res = null;// 结果集，用于转载查询到的结果
				//方法最终要返回的结果
				List<Book> bookList = new ArrayList();
				//要执行的sql语句
				String sql = "SELECT * FROM book LIMIT ?,?";
				try {
					con = BaseDao.getCon();//获取连接
					ps = con.prepareStatement(sql);//预编译  sql
					ps.setInt(1, (pageNum - 1) * pageSize);
					ps.setInt(2, pageSize);
					res = ps.executeQuery();// 执行 查询，返回 结果集
					//解析结果集  把res里的数据 转换成对象 或者是 对象的集合
					while(res.next()) {
						Book book = new Book();
			
						book.setBookId(res.getInt("bookId"));
						book.setBookName(res.getString("bookName"));
						book.setBookType(res.getString("bookType"));
						book.setBookWriter(res.getString("bookWriter"));
						book.setBookPrice(res.getDouble("bookPrice"));
						book.setPubDate(res.getDate("pubDate"));
						book.setBookCover(res.getString("bookCover"));
						bookList.add(book);
					}
				
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} finally {
					//关闭资源
					BaseDao.closeAll(res, ps, con);
				}
				return bookList;
	}

	@Override
	public int insertBook(Book book) {
		Connection con = null;//数据库连接对象  代表一次数据库连接
		PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
		int result = 0;
		String sql = "INSERT INTO book(bookId,bookName,bookType,bookWriter,bookPrice,pubDate,bookCover) VALUES(default,?,?,?,?,?,?)";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql
			ps.setString(1, book.getBookName());
			ps.setString(2, book.getBookType());
			ps.setString(3, book.getBookWriter());
			ps.setDouble(4, book.getBookPrice());
			ps.setDate(5, new Date(book.getPubDate().getTime()));
			ps.setString(6, book.getBookCover());
			result = ps.executeUpdate();
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(null, ps, con);
		}
		return result;
	}

	@Override
	public int deleteBook(int bookId) {
		Connection con = null;//数据库连接对象  代表一次数据库连接
		PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
		int result = 0;
		String sql = "DELETE FROM book WHERE bookId = ?";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql
			ps.setInt(1, bookId);
			result = ps.executeUpdate();
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(null, ps, con);
		}
		return result;
	}

	@Override
	public Book selectBookById(int bookId) {
		// 数据库连接 操作对象 结果集
		Connection con = null;//数据库连接对象  代表一次数据库连接
		PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
		ResultSet res = null;// 结果集，用于转载查询到的结果
		//方法最终要返回的结果
		Book book = null;
		//要执行的sql语句
		String sql = "SELECT * FROM book WHERE bookId = ?";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql
			ps.setInt(1, bookId);
			res = ps.executeQuery();// 执行 查询，返回 结果集
			//解析结果集  把res里的数据 转换成对象 或者是 对象的集合
			if(res.next()) {
				book = new Book();
				book.setBookId(res.getInt("bookId"));
				book.setBookName(res.getString("bookName"));
				book.setBookType(res.getString("bookType"));
				book.setBookWriter(res.getString("bookWriter"));
				book.setBookPrice(res.getDouble("bookPrice"));
				book.setPubDate(res.getDate("pubDate"));
				book.setBookCover(res.getString("bookCover"));
			}
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(res, ps, con);
		}
		return book;
	}

	@Override
	public int updateBook(Book book) {
		Connection con = null;//数据库连接对象  代表一次数据库连接
		PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
		int result = 0;
		String sql = "UPDATE Book SET bookName = ?,bookType = ?,bookWriter = ?,bookPrice = ?,pubDate = ? WHERE bookId = ?";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql
			ps.setString(1, book.getBookName());
			ps.setString(2, book.getBookType());
			ps.setString(3, book.getBookWriter());
			ps.setDouble(4, book.getBookPrice());
			ps.setDate(5, new Date(book.getPubDate().getTime()));
			ps.setInt(6, book.getBookId());
			result = ps.executeUpdate();
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(null, ps, con);
		}
		return result;
	}

	@Override
	public List<Book> selectBook(String bookName) {
		Connection con = null;//数据库连接对象  代表一次数据库连接
		PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
		ResultSet res = null;// 结果集，用于转载查询到的结果
		//方法最终要返回的结果
		List<Book> bookList = new ArrayList();
		//对于模糊查找 使用 like的时候 处理方式
		//1 SELECT * FROM book WHERE bookName LIKE concat('%',?,'%')
		//   ps.setString(1,bookName)
		//2 SELECT * FROM book WHERE bookName LIKE ?
		//	 ps.setString(1,"%"+bookName+"%")
		String sql = "SELECT * FROM book WHERE bookName LIKE ?";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql
			ps.setString(1, "%"+bookName+"%");
			res = ps.executeQuery();// 执行 查询，返回 结果集
			//解析结果集  把res里的数据 转换成对象 或者是 对象的集合
			while(res.next()) {
				Book book = new Book();
				book.setBookId(res.getInt("bookId"));
				book.setBookName(res.getString("bookName"));
				book.setBookType(res.getString("bookType"));
				book.setBookWriter(res.getString("bookWriter"));
				book.setBookPrice(res.getDouble("bookPrice"));
				book.setPubDate(res.getDate("pubDate"));
				book.setBookCover(res.getString("bookCover"));
				bookList.add(book);
			}
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(res, ps, con);
		}
		return bookList;
	}

	@Override
	public int selectBookNum() {
		Connection con = null;//数据库连接对象  代表一次数据库连接
		PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
		ResultSet res = null;// 结果集，用于转载查询到的结果
		//方法最终要返回的结果
		int rows = 0;
		//要执行的sql语句
		String sql = "SELECT count(1) as nums FROM book";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql	
			res = ps.executeQuery();// 执行 查询，返回 结果集
			//解析结果集  把res里的数据 转换成对象 或者是 对象的集合
			if(res.next()) {
				rows = res.getInt("nums");
			}
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(res, ps, con);
		}
		return rows;
	}

	@Override
	public int selectBookNum(String bookName) {
		// TODO Auto-generated method stub
		Connection con = null;//数据库连接对象  代表一次数据库连接
		PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
		ResultSet res = null;// 结果集，用于转载查询到的结果
		//方法最终要返回的结果
		int rows = 0;
		//要执行的sql语句
		String sql = "SELECT count(1) as nums FROM book where bookName like ?";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql	
			ps.setString(1, "%"+bookName+"%");
			res = ps.executeQuery();// 执行 查询，返回 结果集
			//解析结果集  把res里的数据 转换成对象 或者是 对象的集合
			if(res.next()) {
				rows = res.getInt("nums");
			}
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(res, ps, con);
		}
		return rows;
	}

	@Override
	public List<Book> selectAllBook(String bookName, int pageNum, int pageSize) {
		Connection con = null;//数据库连接对象  代表一次数据库连接
		PreparedStatement ps = null; //数据库操作对象 用于执行增删改查操作
		ResultSet res = null;// 结果集，用于转载查询到的结果
		//方法最终要返回的结果
		List<Book> bookList = new ArrayList();
		//要执行的sql语句
		String sql = "SELECT * FROM book	where bookName like ? LIMIT ?,?";
		try {
			con = BaseDao.getCon();//获取连接
			ps = con.prepareStatement(sql);//预编译  sql
			ps.setString(1, "%"+bookName+"%");
			ps.setInt(2, (pageNum - 1) * pageSize);
			ps.setInt(3, pageSize);
			res = ps.executeQuery();// 执行 查询，返回 结果集
			//解析结果集  把res里的数据 转换成对象 或者是 对象的集合
			while(res.next()) {
				Book book = new Book();
	
				book.setBookId(res.getInt("bookId"));
				book.setBookName(res.getString("bookName"));
				book.setBookType(res.getString("bookType"));
				book.setBookWriter(res.getString("bookWriter"));
				book.setBookPrice(res.getDouble("bookPrice"));
				book.setPubDate(res.getDate("pubDate"));
				book.setBookCover(res.getString("bookCover"));
				bookList.add(book);
			}
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//关闭资源
			BaseDao.closeAll(res, ps, con);
		}
		return bookList;
	}
	
	
}
